package akcja;

import helper.Blad;

import java.io.*;
import java.sql.SQLException;

import javax.servlet.http.*;
import javax.servlet.*;

import widok.Widok;

public abstract class Akcja extends HttpServlet {

	protected HttpServletRequest request;
	protected HttpServletResponse response;
	protected HttpSession session;
	protected boolean isPost;

	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		isPost = false;
		dispatch(req, res);
	}

	public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		isPost = true;
		dispatch(req, res);
	}

	private void dispatch(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		request = req;
		response = res;
		session = req.getSession();
		try {
			//response.setHeader("Content-Type", "text/html; charset=utf-8");
			wykonaj().pokaz(req, res, getServletContext());
		} catch (SQLException e) {
			new widok.ProstyString("Błąd SQL: "+ e.toString()).pokaz(req, res, getServletContext());
		} catch (Blad e) {
			new widok.Szablon("blad.jsp", new model.BladBean(e)).pokaz(req, res, getServletContext());
		}
	}

	/**
	 * Akcja właściwa, tutaj znajduje się jej kontroler
	 * @throws SQLException 
	 */
	protected abstract Widok wykonaj() throws IOException, ServletException, SQLException;

	protected boolean isZalogowany() {
		return (session.getAttribute("uzytkownik") != null);
	}

	protected boolean isAdministrator() {
		return (session.getAttribute("uprawnienia") == "admin");
	}

	protected String zalogowanyUzytkownik() {
		if (!isZalogowany())
			throw new Blad("użytkownik nie zalogowany");
		return (String) session.getAttribute("uzytkownik");
	}

}
